const path = require('path')
const { CleanWebpackPlugin } = require('clean-webpack-plugin')
const webpack = require('webpack')


module.exports = {
  mode: "none",
  entry: "./src/index.js", // 如果是相对路径，前面的 './' 不可省略
  // output 是对象
  output: {
    filename: "bundle.js", // 输出文件名
    path: path.join(__dirname, "dist") //path 必须是绝对路径
  },
  plugins: [
    new CleanWebpackPlugin(),
    // 每个键值都会被注入到代码中
    new webpack.DefinePlugin({
      // 值要求是一段符合 js 语法代码，如果是一段字符串，会被直接填写进去，不会加引号
      // 'appName': '阿里云盘'
      // appName: '"阿里云盘"'
      // 此处有一个小技巧，如果是一个值的话可以通过 JSON.stringify 转换
      appName: JSON.stringify('阿里云盘')
    })
  ],
  // 集中配置优化功能
  optimization: {
    usedExports: true, // 只导出外部使用了的成员，但是代码还是会打包，只是不导出
    // minimize: true, // 开启代码压缩
    // concatenateModules: true,
    sideEffects: true
  },
  module: {
    rules: [{
      test: /.js$/,
      use: [
        {
          loader: 'babel-loader',
          options: {
            presets: [
              // preset 名称，preset 属性
              // 以下配置保证打包环境不使用 es module
              // auto 表示根据环境自动判断，commonjs 表示强制转换为 commonjs
              // ['@babel/preset-env',{modules:'commonjs'}]
              ['@babel/preset-env',{modules:false}]
            ]
          }
        }
      ]
    }]
  }
}